#include <stdio.h>
#include <string.h>

char * seg_zh_char(char *dst, int dst_len, const char *src)
{
	int left = 0;
	int i = 0;
	int j = 0;
	int src_len = strlen(src);
	unsigned char k = 0;
	for(i=0,j=0; i<src_len && j<dst_len; i++,j++){
		k = (unsigned char)(src[i]);
		if(left == 0){
			if(k<128){			//0xxxxxxx
				left = 0;
			}else if(k>=192 && k<224){	//110xxxxx 10xxxxxx 
				left = 1;
			}else if(k>=224 && k<240){	//1110xxxx 10xxxxxx 10xxxxxx 
				left = 2;
			}else{
				break;
			}
			if(left > 0 && i > 0){
				dst[j++] = ' ';
			}
		}else if(left>0 && k>=128 && k<192){
			left --;
		}else{
			break;
		}
		dst[j] = src[i];
	}
	if(i<src_len && j<dst_len){
		fprintf(stderr, "invalid char %u at %d\n",k,i);
	}else if(i<src_len && j==dst_len){
		fprintf(stderr, "dst buf too small\n");
	}
	dst[j] = 0;
	return dst;
}

int printx(char * str)
{
	printf("<\n");
	int i = 0;
	for(i=0; i<strlen(str); i++){
		printf("%x", (unsigned char)str[i]);
		if((i+1)%16 == 0){
			printf("\n");
		}else if((i+1)%4 == 0){
			printf("\t");
		}else{
			printf(" ");
		}
	}
	printf("\n>\n");

	return 0;
}

int main(int argc, char ** argv)
{
	char *src = argv[1];
	char dst[1024*5] = {0};
	seg_zh_char(dst,1024,src);
/*	printf("src: %s\n", src);
	printx(src);
	printx(dst);
*/	printf("%s", dst);
	return 0;
}

